#include <iostream>
using namespace std;

class Base
{
public:
  int m_a;
  Base()
  {
    m_a = 100;
  }

  void func() {
    cout << "Base - func 调用" << endl;
  }

  void func(int a) {
    cout << "Base - func 调用" << a << endl;
  }
};

class Son : public Base
{
public:
  int m_a;
  Son()
  {
    m_a = 200;
  }

  void func() {
    cout << "Son - func 调用" << endl;
  }
};

void test01()
{
  Son s;
  cout << "Son m_a = " << s.m_a << endl;
  // 如果通过子类对象，访问到父类中同名成员，需要加作用域
  cout << "Base m_a = " << s.Base::m_a << endl;

  // 同名函数
  s.func();
  // 如果通过子类对象，访问到父类中同名成员，需要加作用域
  s.Base::func();

  // 如果子类中和父类中出现了同名函数，子类中会隐藏掉所有的重名函数
  // 如果想访问到父类中被隐藏的同名函数，需要加作用域
  // s.func(100);
  s.Base::func(100);
}

int main(int argc, char const *argv[])
{
  test01();

  return 0;
}